home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / ZSI / resolvers.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  5KB  |  167 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from ZSI import _copyright, _child_elements, EvaluateException, TC
  5. import multifile
  6. import mimetools
  7. import urllib
  8. from base64 import decodestring as b64decode
  9. import cStringIO as StringIO
  10.  
  11. def Opaque(uri, tc, ps, **keywords):
  12.     source = urllib.urlopen(uri, **keywords)
  13.     enc = source.info().getencoding()
  14.     if enc in ('7bit', '8bit', 'binary'):
  15.         return source.read()
  16.     
  17.     data = StringIO.StringIO()
  18.     mimetools.decode(source, data, enc)
  19.     return data.getvalue()
  20.  
  21.  
  22. def XML(uri, tc, ps, **keywords):
  23.     source = urllib.urlopen(uri, **keywords)
  24.     enc = source.info().getencoding()
  25.     if enc in ('7bit', '8bit', 'binary'):
  26.         data = source
  27.     else:
  28.         data = StringIO.StringIO()
  29.         mimetools.decode(source, data, enc)
  30.         data.seek(0)
  31.     dom = ps.readerclass().fromStream(data)
  32.     return _child_elements(dom)[0]
  33.  
  34.  
  35. class NetworkResolver:
  36.     
  37.     def __init__(self, prefix = None):
  38.         if not prefix:
  39.             pass
  40.         self.allowed = []
  41.  
  42.     
  43.     def _check_allowed(self, uri):
  44.         for a in self.allowed:
  45.             if uri.startswith(a):
  46.                 return None
  47.                 continue
  48.         
  49.         raise EvaluateException('Disallowed URI prefix')
  50.  
  51.     
  52.     def Opaque(self, uri, tc, ps, **keywords):
  53.         self._check_allowed(uri)
  54.         return Opaque(uri, tc, ps, **keywords)
  55.  
  56.     
  57.     def XML(self, uri, tc, ps, **keywords):
  58.         self._check_allowed(uri)
  59.         return XML(uri, tc, ps, **keywords)
  60.  
  61.     
  62.     def Resolve(self, uri, tc, ps, **keywords):
  63.         if isinstance(tc, TC.XML):
  64.             return XML(uri, tc, ps, **keywords)
  65.         
  66.         return Opaque(uri, tc, ps, **keywords)
  67.  
  68.  
  69.  
  70. class MIMEResolver:
  71.     
  72.     def __init__(self, ct, f, next = None, uribase = 'thismessage:/', seekable = 0, **kw):
  73.         for param in ct.split(';'):
  74.             a = param.strip()
  75.             if a.startswith('boundary='):
  76.                 if a[9] in ('"', "'"):
  77.                     boundary = a[10:-1]
  78.                 else:
  79.                     boundary = a[9:]
  80.                 break
  81.                 continue
  82.         else:
  83.             raise ValueError('boundary parameter not found')
  84.         self.id_dict = { }
  85.         self.loc_dict = { }
  86.         self.parts = []
  87.         self.next = next
  88.         self.base = uribase
  89.         mf = multifile.MultiFile(f, seekable)
  90.         mf.push(boundary)
  91.         while mf.next():
  92.             head = mimetools.Message(mf)
  93.             body = StringIO.StringIO()
  94.             mimetools.decode(mf, body, head.getencoding())
  95.             body.seek(0)
  96.             part = (head, body)
  97.             self.parts.append(part)
  98.             key = head.get('content-id')
  99.             if key:
  100.                 if key[0] == '<' and key[-1] == '>':
  101.                     key = key[1:-1]
  102.                 
  103.                 self.id_dict[key] = part
  104.             
  105.             key = head.get('content-location')
  106.             if key:
  107.                 self.loc_dict[key] = part
  108.                 continue
  109.         mf.pop()
  110.  
  111.     
  112.     def GetSOAPPart(self):
  113.         (head, part) = self.parts[0]
  114.         return StringIO.StringIO(part.getvalue())
  115.  
  116.     
  117.     def get(self, uri):
  118.         if uri.startswith('cid:'):
  119.             (head, part) = self.id_dict[uri[4:]]
  120.             return StringIO.StringIO(part.getvalue())
  121.         
  122.         if self.loc_dict.has_key(uri):
  123.             (head, part) = self.loc_dict[uri]
  124.             return StringIO.StringIO(part.getvalue())
  125.         
  126.  
  127.     
  128.     def Opaque(self, uri, tc, ps, **keywords):
  129.         content = self.get(uri)
  130.         if content:
  131.             return content.getvalue()
  132.         
  133.         if not self.next:
  134.             raise EvaluateException('Unresolvable URI ' + uri)
  135.         
  136.         return self.next.Opaque(uri, tc, ps, **keywords)
  137.  
  138.     
  139.     def XML(self, uri, tc, ps, **keywords):
  140.         content = self.get(uri)
  141.         if content:
  142.             dom = ps.readerclass().fromStream(content)
  143.             return _child_elements(dom)[0]
  144.         
  145.         if not self.next:
  146.             raise EvaluateException('Unresolvable URI ' + uri)
  147.         
  148.         return self.next.XML(uri, tc, ps, **keywords)
  149.  
  150.     
  151.     def Resolve(self, uri, tc, ps, **keywords):
  152.         if isinstance(tc, TC.XML):
  153.             return self.XML(uri, tc, ps, **keywords)
  154.         
  155.         return self.Opaque(uri, tc, ps, **keywords)
  156.  
  157.     
  158.     def __getitem__(self, cid):
  159.         (head, body) = self.id_dict[cid]
  160.         newio = StringIO.StringIO(body.getvalue())
  161.         return newio
  162.  
  163.  
  164. if __name__ == '__main__':
  165.     print _copyright
  166.  
  167.